package main

import "fmt"

// 接口

// AliPay 阿里支付
type AliPay struct{}

// Pay AliPay的Pay方法
func (a AliPay) Pay() string {
	return "使用支付宝支付"
}

// WeChatPay 微信支付
type WeChatPay struct{}

// Pay WeChatPay的Pay方法
func (w WeChatPay) Pay() string {
	return "使用微信支付"
}

// JDPay 京东支付
type JDPay struct{}

// Pay JDPay的Pay方法
func (j JDPay) Pay() string {
	return "使用京东支付"
}

// 定义接口
type Pay interface {
	Pay() string
}

// 定义一个函数 传入一个接口
func pay(obj Pay) {
	fmt.Println(obj.Pay())
}

func main() {
	a := AliPay{}
	w := WeChatPay{}
	j := JDPay{}

	// 接口类型的切片
	var p []Pay
	p = append(p, a, w, j)
	fmt.Println(p)

	// pay的方法 传入不同类型的结构体
	pay(a)
	pay(w)
	pay(j)

	// 3. 使用
	var p1 Pay
	p1 = a
	fmt.Println(p1.Pay())
	p1 = w
	fmt.Println(p1.Pay())
	p1 = j
	fmt.Println(p1.Pay())
}
